﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace App_Persistencia
{
    public class Empleado_Data
    {
        private int empleadoId;

        public int EmpleadoId
        {
            get { return empleadoId; }
            set { empleadoId = value; }
        }

        private string nomEmpleado;

        public string NomEmpleado
        {
            get { return nomEmpleado; }
            set { nomEmpleado = value; }
        }

        private string apeEmpleado;

        public string ApeEmpleado
        {
            get { return apeEmpleado; }
            set { apeEmpleado = value; }
        }

        private string email;

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        private int telEmpleado;

        public int TelEmpleado
        {
            get { return telEmpleado; }
            set { telEmpleado = value; }
        }

        private string sexo;

        public string Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        private int nroDocEmpleado;

        public int NroDocEmpleado
        {
            get { return nroDocEmpleado; }
            set { nroDocEmpleado = value; }
        }

        private Tipo_Docmento_Data docTipo;

        public Tipo_Docmento_Data DocTipo
        {
            get { return docTipo; }
            set { docTipo = value; }
        }

        private string calleDirEmpleado;

        public string CalleDirEmpleado
        {
            get { return calleDirEmpleado; }
            set { calleDirEmpleado = value; }
        }

        private int nroDirEmpleado;

        public int NroDirEmpleado
        {
            get { return nroDirEmpleado; }
            set { nroDirEmpleado = value; }
        }

        private int pisoDirEmpleado;

        public int PisoDirEmpleado
        {
            get { return pisoDirEmpleado; }
            set { pisoDirEmpleado = value; }
        }

        private string deptoDirEmpleado;

        public string DeptoDirEmpleado
        {
            get { return deptoDirEmpleado; }
            set { deptoDirEmpleado = value; }
        }


        DateTime fechaAlta;

        public DateTime FechaAlta
        {
            get { return fechaAlta; }
            set { fechaAlta = value; }
        }

        DateTime fechaBaja;

        public DateTime FechaBaja
        {
            get { return fechaBaja; }
            set { fechaBaja = value; }
        }

        string motivoBaja;

        public string MotivoBaja
        {
            get { return motivoBaja; }
            set { motivoBaja = value; }
        }

        private Barrio_Data bar = new Barrio_Data();

        public Barrio_Data Bar
        {
            get { return bar; }
            set { bar = value; }
        }

        private Usuario_Data usuario;

        public Usuario_Data Usuario
        {
            get { return usuario; }
            set { usuario = value; }
        }

        Empleado_Tipo_Data tipoEmpleado = new Empleado_Tipo_Data();

        public Empleado_Tipo_Data TipoEmpleado
        {
            get { return tipoEmpleado; }
            set { tipoEmpleado = value; }
        }

        public void CargarEmpleado()
        {

            //Crear el Objeto de conexion, inicializa con la cadena de conexion
            string conexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
            System.Data.SqlClient.SqlConnection connection = new SqlConnection(conexion);
            connection.Open();
            SqlTransaction transaccion = connection.BeginTransaction();
            try
            {


                System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
                command.Transaction = transaccion;
                command.Connection = connection;

                command.CommandText = "spCargarUsuarioEmpleado";
                command.CommandType = CommandType.StoredProcedure;

                // Declaro el Objeto de parametro
                System.Data.SqlClient.SqlParameter param;

                //establesco el parametro @usuario, uso como entrada los atributos de la clase
                param = command.Parameters.AddWithValue("@Usuario", usuario.NomUsuario);
                param.DbType = DbType.String;
                param.Direction = ParameterDirection.Input;

                param = command.Parameters.AddWithValue("@Password", usuario.Password);
                param.DbType = DbType.String;
                param.Direction = ParameterDirection.Input;

                //establesco el parametro @FechaCreacion
                param = command.Parameters.AddWithValue("@FechaCreacion", fechaAlta);
                param.DbType = DbType.DateTime;
                param.Direction = ParameterDirection.Input;

                ////establesco el parametro de salida @UsuarioId
                param = command.Parameters.AddWithValue("@UsuarioId", 0);
                param.Direction = ParameterDirection.Output;

                // ejecuto el procedimiento
                command.ExecuteNonQuery();
                //recupero el valor del parametro @UsuarioId
                usuario.UsuarioId = Convert.ToInt32(command.Parameters["@UsuarioId"].Value);


                //aca carga el cliente con el id de usuario que cargo recien


                System.Data.SqlClient.SqlCommand commandCliente = new System.Data.SqlClient.SqlCommand();
                //Asigno a la propiedad Transaction del Objeto SqlCommand el valor del Objeto SqlTransaction
                commandCliente.Transaction = transaccion;
                //Asingo la conexion al objeto conection
                commandCliente.Connection = connection;
                commandCliente.CommandText = "spCargarEmpleado";
                commandCliente.CommandType = CommandType.StoredProcedure;

                // Declaro el Objeto de parametro
                System.Data.SqlClient.SqlParameter paramCliente;


                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Nombre", NomEmpleado);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Apellido", ApeEmpleado);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Calle", CalleDirEmpleado);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Numero", NroDirEmpleado);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Piso", PisoDirEmpleado);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Depto", DeptoDirEmpleado);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @Email
                paramCliente = commandCliente.Parameters.AddWithValue("@Email", Email);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @Telefono
                paramCliente = commandCliente.Parameters.AddWithValue("@Telefono", TelEmpleado);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Sexo", Sexo);
                paramCliente.DbType = DbType.String;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@Documento", NroDocEmpleado);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @FechaCreacion
                paramCliente = commandCliente.Parameters.AddWithValue("@FechaCreacion", FechaAlta);
                paramCliente.DbType = DbType.DateTime;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@TipoDocId", DocTipo.Id);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@BarrioId", Bar.Id);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@UsuarioId", Usuario.UsuarioId);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;

                //establesco el parametro @
                paramCliente = commandCliente.Parameters.AddWithValue("@TipoEmpleadoId", TipoEmpleado.Id);
                paramCliente.DbType = DbType.Int32;
                paramCliente.Direction = ParameterDirection.Input;


                // ejecuto el procedimiento
                commandCliente.ExecuteNonQuery();


                transaccion.Commit();


            }
            catch (SystemException e)
            {
                //si se produjo algun error lo capturo y ejecuto el Rollback de la transaccion
                transaccion.Rollback();
                //provoco una Exepcion para la capa superior
                System.Diagnostics.Trace.Write(e.Message);

                throw new SystemException(e.Message);
            }
            finally
            {
                //Si termino la carga correctamente cierro la conexion
                connection.Close();
            }
        }

        public DataTable buscarEmpleadoxArea(int area)
        {


            string commandSQL = "SELECT   Empleado.emp_Nombre AS Nombre, Empleado.emp_Id AS EmpId, Empleado.emp_Apellido AS Apellido, Empleado_Area.EArea_Nombre AS NombreArea,  " +
               "  Empleado_Area.EArea_Id AS AreaId, Empleado_Tipo.tEmp_PrecioXEvento AS Costo, Empleado_Tipo.tEmp_Nombre AS TipoEmpleado " +
               "  FROM      Empleado INNER JOIN " +
               "  Empleado_Tipo ON Empleado.tipoEmpleado_Id = Empleado_Tipo.tEmp_Id INNER JOIN " +
              "   Empleado_Area ON Empleado_Tipo.AreaEmpleado_Id = Empleado_Area.EArea_Id " +
                                    " WHERE Empleado_Area.EArea_Id = " + area;

            // Creo el Objeto DataAdapter y le paso la cadena al constructor y la sentencia SQL
            string conexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
            SqlDataAdapter dataAdapter = new SqlDataAdapter(commandSQL, conexion);

            // Creo el Objeto DataSet
            DataSet dataSet = new DataSet();

            // Relleno el Objeto DataSet
            dataAdapter.Fill(dataSet, "EmpxAreas");

            //creo la vista de la consulta
            DataView dataView = new DataView();

            //Cargo la Vista con el contenido de la tabla de resultados
            dataView = dataSet.Tables["EmpxAreas"].DefaultView;

            // Obtengo la tabla del DataSet
            DataTable dataTable = dataSet.Tables["EmpxAreas"];

            return dataTable;
        }

        public DataTable buscarEmpleadoxEvento(int idEvento)
        {

            string commandSQL = "SELECT        Empleado.emp_Nombre AS empleadoNombre, Empleado.emp_Id AS empleadoId, Empleado.emp_Apellido AS empleadoApellido, Empleado_Area.EArea_Nombre AS empleadoArea, Empleado_Tipo.tEmp_PrecioXEvento AS prexioXEvento, " +
                                 "Empleado_Tipo.tEmp_Nombre AS empleadoTipo " +
                                 "FROM            Empleado INNER JOIN " +
                       " Empleados_x_Evento AS EV ON Empleado.emp_Id = EV.empleado_Id INNER JOIN " +
                        " Empleado_Tipo ON Empleado.tipoEmpleado_Id = Empleado_Tipo.tEmp_Id INNER JOIN " +
                        " Empleado_Area ON Empleado_Tipo.AreaEmpleado_Id = Empleado_Area.EArea_Id " +
"WHERE        (EV.evento_Id = " + idEvento + ") ";

            
            // Creo el Objeto DataAdapter y le paso la cadena al constructor y la sentencia SQL
            string conexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
            SqlDataAdapter dataAdapter = new SqlDataAdapter(commandSQL, new SqlConnection(conexion));


            // Creo el Objeto DataSet
            DataSet dataSet = new DataSet();

            // Relleno el Objeto DataSet
            dataAdapter.Fill(dataSet, "EmpxEvent");

            // Obtengo la tabla del DataSet
            DataTable dataTable = dataSet.Tables["EmpxEvent"];

            return dataTable;
        }
    }
}
